package lei.b_java数据类型;

/**
 * @className: B引用数据类型
 * @author: xl
 * @date: 2025/2/28 20:34
 * @Version: 1.0
 * @description:
 */

public class Demo_引用数据类型 {
    public static void main(String[] args) {
        Dog dog = new Dog();

        Animal animal = dog; // 向上转型
        animal.eat(); // 调用的是Dog的方法,方法进行重写了

        // animal.bark(); // 编译错误，因为Animal类中没有bark方法


        Animal animal1 = new Dog(); // 先进行向上转型
        if (animal1 instanceof Dog) {
            Dog dog1 = (Dog) animal1; // 正确的向下转型
            dog1.bark(); // 可以调用Dog类的方法
        }


        //Animal anotherAnimal = new Animal();
        //Dog anotherDog = (Dog) anotherAnimal; // 运行时会抛出ClassCastException，因为anotherAnimal实际上不是Dog类型

    }
}

class Animal {
    void eat() {
        System.out.println("This animal eats food.");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("The dog barks.");
    }

    void eat() {
        System.out.println("The dog eats food.");
    }
}

